Software source code is transformed into executable form by a compilation process. In one approach to compilation, a compiler having a frontend and a backend compiles each file of source separately and directly generates a native object file for each source file. A linker takes all the native object files from the compiler as input, and links them together (with libraries if indicated) to produce a final image, such as an exe or dll format file.